home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / mac / developm / language / openprlg.sit / Open Prolog 1.0d26 / Open Prolog Info < prev    next >
Encoding:
Text File  |  1991-12-31  |  22.7 KB  |  543 lines

  1. ╫ Hi. Welcome to 'Open Prolog'.
  2.  
  3. This information refers to version 1.0d26.
  4. Please read it carefully, especially the section on workarounds at the end.
  5. This is a development version of the software, so it has bugs!
  6. Save your work often.
  7.  
  8. Changes from previous versions are listed at the end of the file.
  9.  
  10. ╫ Introduction
  11.  
  12. Open Prolog is an implementation of Edinburgh-style Prolog.
  13.  
  14. For information on Prolog itself, refer to one of the standard textbooks,
  15. for instance 'Programming in Prolog' by Clocksin & Mellish,
  16. 'Introduction to Logic Programming' by Christopher Hogger, or the
  17. excellent 'Artificial Intelligence through Prolog' by Neil C. Rowe.
  18. (Titles are approximate.)
  19.  
  20. Open Prolog supports most of the features of DEC Prolog or C-Prolog,
  21. including Definite Clause Grammars. Real-number arithmetic isn't supported.
  22. The 'logical' assert and retract semantics of Lindholm & O'Keefe are
  23. implemented.
  24. Last Call Optimisation (often called Tail Recursion Optimisation) is done,
  25. and indexing on the first argument of clause heads is performed,
  26. mainly to detect determinacy so as to improve memory utilisation.
  27.  
  28. Open Prolog is called 'Open' because 'external' predicates can be dropped into
  29. it via a Hypercard-like External Predicate Interface.
  30.  
  31. Open Prolog is not copy protected. 
  32.  
  33. ╫ System & Memory Requirements
  34. Open Prolog runs in machines having System 6 (or later) system software.
  35. If you try to run using an older system, it will complain.
  36. This means that it won't run in anything 'less' than a Mac Plus.
  37. Open Prolog is System 7 compatible.
  38.  
  39. Open Prolog will run under Multifinder in a memory allocation of
  40. 600K bytes or a bit less. 1024K bytes is recommended.
  41. For most programs, more than 1024K won't improve performance much.
  42.  
  43. Open Prolog will run very comfortably on a 1MB machine with
  44. Multifinder off. If you can't start up in a 1MB machine with Multifinder off,
  45. check that you haven't got too big a cache set (64k should be adequate),
  46. and/or too many Startup (INIT) Documents.
  47.  
  48. All memory management and garbage collection is automatic. The
  49. name table is not garbage-collected, so it's possible to overflow it.
  50.  
  51. For the maximum amount of information about errors, put the file
  52. SysErrs.Err in your System Folder.
  53.  
  54. For your information, the development environment is a Mac IIx with 8MB Ram.
  55. Testing is also done on a Mac Plus with 4MB Ram. Systems are 6.0.3 & 7.0.1.
  56.  
  57. ╫ Speed
  58. Open Prolog runs the naive reverse benchmark at about 1900 Lips
  59. on a Macintosh Plus. That means that it's about as fast - maybe even
  60. a little faster - on a Mac Plus than C-Prolog on a Vax 11/780.
  61. On a Quadra 900 (or 700), it runs at 35000 Lips. So, it
  62. runs almost as fast as _compiled_ Dec Prolog ran on a DEC2060.
  63.  
  64. ╫ About Open Prolog╔
  65. The 'About Open Prolog╔' box contains a stacks indicator which
  66. shows memory space broken into
  67. Name (atom & functor), Code, Global, Local & Trail spaces.
  68. It's possible to watch the stacks grow and contract as the program runs,
  69. but keeping the stacks indicator up-to-date slows execution quite a bit!
  70. To avoid the speed penalty, it's possible to open and close the box while
  71. the interpreter is running.
  72. Alternatively, hiding the stacks indicator fully is just as effective.
  73.  
  74. ╫ Installing Open Prolog
  75. Open Prolog can be run from floppy, hard disk, or file server. It may be in a locked
  76. or read-only volume. I haven't tried to use it simultaneously from a server in
  77. multiple machines - let me know how you do!
  78. For error messages, please place the file 'Syserrs.Err' in the system folder of
  79. your own machine.
  80.  
  81. ╫ Using Open Prolog
  82. Open Prolog is a text-oriented Prolog. If you have used DEC Prolog or
  83. C-Prolog, then the style of use of Open Prolog is quite similar.
  84. The Worksheet is the rough equivalent of their log file.
  85. It's better because you can re-use chunks of it.
  86. Standard input and output use the Worksheet by default.
  87.  
  88. ╫ Startup
  89. You can start Open Prolog either by opening some of its documents
  90. or by opening the application itself.
  91.  
  92. ╫ Home Folder
  93. A 'Home Folder' is chosen automatically as follows:
  94. If you start Open Prolog by opening some of its documents, then the folder the documents are in becomes the Home Folder.
  95. If you start Open Prolog by opening it directly, then the folder it's in
  96. becomes the Home Folder.
  97. You can make any folder the Home Folder by saving the Worksheet
  98. into it. See the section on File Naming for the significance of the
  99. Home Folder.
  100.  
  101. ╫ Startup Folder
  102. The Startup Folder is the folder Open Prolog is in when it is launched.
  103.  
  104. ╫ Startup Actions
  105. Before opening any files that you may have selected on the desktop,
  106. Open Prolog will open a Worksheet in the home folder, always called
  107. 'Open Prolog Worksheet'.
  108. Open Prolog does a few other things at startup:
  109. It looks in the startup folder for a file called 'Open Prolog Options',
  110. and if it exists, it is consulted.
  111. It looks in the home folder for a file called 'Open Prolog Startup' and if
  112. it exists, it is consulted.
  113. These files can be used to do routine things at startup, if desired.
  114. Open Prolog Options should contain generally useful stuff, whereas
  115. Open Prolog Startup, being specific to a folder, can contain more specialised
  116. startup stuff.
  117. For example, in this distribution of Open Prolog, a clause in
  118. the Open Prolog Startup file checks for the existence of this file -
  119. Open Prolog Info - and displays an alert message in a box.
  120. So, if this folder is the Home Folder, then the Open Prolog Startup file will
  121. be consulted, and you'll get the alert message.
  122.  
  123. Once the startup phase is finished, you are free to edit these files in the
  124. normal way - there's nothing special about them.
  125.  
  126. Note that (effective from 1.0d25) while Open Prolog Options is being consulted during
  127. startup, the default folder for files is the startup folder rather than the home folder.
  128. This facilitates automatic startup with multiple files. 
  129.  
  130. ╫ Usage
  131. It helps to visualise the system as having two distinct parts -
  132. the text editor and the Prolog interpreter.
  133.  
  134. ╫ Text Editor
  135. Your interaction with Open Prolog is via the text editor. With it, you can do
  136. text-editing things on the Worksheet, and on up to seven other files.
  137. Facilities offered are standard. Worth mentioning is 'Auto-indent'
  138. which, if enabled, works by copying all the spaces & tabs from the start
  139. of the previous line down to the start of this line. Also worth mentioning is
  140. the 'Search All Windows' in the Find and Replace menus. All windows will
  141. be searched, in front-to-back order, until a match is found. The window in
  142. which the match is found becomes the front window.
  143. An open diamond - ╫ - appears opposite the name of the current front window
  144. in the Window menu. Underlining indicates that the window needs to be
  145. saved (either it's been changed, or it was never saved before).
  146. The 'Display Selection' menu will scroll the caret or the selected text into
  147. view.
  148. It's possible that Open Prolog won't allow you to open a window because it hasn't
  149. enough memory. To get around this, enter the built-in predicate 'gc'.
  150. This should free up some space for more windows.
  151.  
  152. ╫ Window Characteristics
  153. When windows are opened, they are opened in the same location (assuming
  154. it's still visible), and with the same size as when they were
  155. last closed.
  156. Likewise, font, font size and the position of the flashing caret or selection
  157. point are remembered from when the window was last used.
  158. A window's maximum size if fixed according to the size of the
  159. printable page in the currently selected printer.
  160.  
  161.  
  162. ╫ Locked Files
  163. ***Note - treatment of locked files & volumes doesn't work properly at the moment.
  164. If a file is locked, or its volume is locked, you can use the window
  165. as normal, but you won't be allowed to save changes to that file.
  166.  
  167. ╫ Worksheet
  168. Most of the transactions that occur between you and Open Prolog will be
  169. through a window. Generally, you issue commands by typing them into a
  170. window and then notifying the interpreter about them (using the Enter key),
  171. and Open Prolog sends replies into the same window.
  172. You can use any window for this, but the Worksheet will be chosen by default
  173. or if any errors occur in using another window.
  174. The Worksheet can't be closed.
  175.  
  176. ╫ The 'Enter' Key
  177. To communicate with the Prolog interpreter, you need to notify it in some
  178. way that what you're doing is not just text editing. This is the function of
  179. the 'Enter' key: all input from the text editor to the interpreter
  180. is denoted by selecting the text and typing the <ENTER> key.
  181. (This is similar to the arrangement in Apple's excellent MPW).
  182.  
  183. For example, below is the text of a command to consult the file 'benchmarks'.
  184. To input it to the interpreter,  select it (include the full stop) and
  185. type the <ENTER> key:
  186.  
  187. [benchmarks].
  188.  
  189. Actually, you don't always have to select the whole thing; if the text
  190. occupies only one line, position the cursor anywhere along it and type <ENTER>.
  191. The whole line will then be taken as the text. This is called
  192. 'single line selection'.
  193.  
  194. Remember also that you need to use the <ENTER> key to denote any input to the
  195. interpreter, not just command input.
  196.  
  197. Try evaluating the following query by single-line-selecting it.
  198. You'll need to provide a further input in response; again, you
  199. can use single line selection. Also, remember the full stop after
  200. the term:
  201.  
  202. write('Please enter a Prolog term: '),read(Term),write('It''s: '),write(Term).
  203.  
  204. As is normal on DEC Prolog, where variable bindings are given as part
  205. of the result of a query, the system waits for confirmation - type the
  206. <ENTER> key - or a request for a retry - type a semicolon and  the <ENTER> key.
  207.  
  208. ╫ Prompts
  209. The standard ?- prompt generally appears on the  'status bar'
  210. at the top of the front window.
  211. If you wish, you can enter a query preceded by a ?-  - it won't make any
  212. difference. If you precede your query by a :- then it will be performed
  213. without returning the variable bindings.
  214.  
  215. Examples:
  216. :- write(H),nl.
  217. ?- write(G).
  218.  
  219. ╫ Comment on <ENTER> & Prompts
  220. Using the <ENTER> key to denote input to the interpreter has many advantages,
  221. although it's probably a bit annoying to get used to.
  222. The principal advantage is that you can do standard
  223. text-editing freely and you can use any part of the Worksheet as
  224. a source of input. In other words, you can re-use text on the Worksheet
  225. over and over.
  226. (Some people have complained that there isn't an ENTER key of their
  227. machines. IN fact, there is one on every machine. Sometimes it has a symbol like
  228. an arrowhead pointing upwards to meet a horizontal line.) On compact keyboards
  229. it is usually the strange key to the right of the space bar.
  230.  
  231. ╫ Syntax Errors
  232. When Open Prolog tries to read a term, either as a result of your program
  233. or built-in predicates like consult, if it detects any errors, it will try to
  234. notify you in a useful way. An error message is written to the output window.
  235. The part of the error message that begins:
  236. :- 'Show Syntax Error'(╔ 
  237. has the form of a Prolog commands, and can be used to call the
  238. 'Show Syntax Error' built-in predicate,
  239. which will try to open the file and show where the error was.
  240. You use it by single-line-selecting it.
  241. Try it by consulting the file 'buggy syntax' which has a 
  242. deliberate error:
  243.  
  244. ['buggy syntax'].
  245.  
  246. If the file is already open under a different (window) name, or if the file is
  247. too big, the call will fail.
  248.  
  249. ╫ Activity During Evaluation
  250. During a long evaluation, it's still possible to use the
  251. text editor in windows other than the current output window (which
  252. is usually the Worksheet). The system will share
  253. the processor between the interpreter and the text editor.
  254. Generally, you won't notice the sharing being done.
  255. Occasionally, however, the interpreter will keep the processor
  256. for a few seconds to do garbage collection, or I/O.
  257. During that time the text editor will 'freeze' and won't respond to
  258. the keyboard or other user input.
  259. This is normal and is no cause for concern.
  260.  
  261. Please be careful to save your work frequently in this mode,
  262. because if the evaluation causes Open Prolog to crash, 
  263. your work may be lost. 
  264.  
  265. ╫ Stopping an Evaluation
  266. The standard 'Command-.' will halt a Prolog evaluation (eventually!).
  267.  
  268. ╫ Background Operation
  269. Open Prolog is Multifinder 'friendly' and will run in the Multifinder 
  270. background. This may be useful for long evaluations. Running under System 7,
  271. it can be hidden and still be running.
  272.  
  273. ╫ Operation on portable Macintoshes
  274. One complication regarding portable Macs is that
  275. during periods of longer than about 15 seconds without any
  276. user interaction or cursor animation, portables may go into 'rest' mode.
  277. In this mode, battery power is conserved by running about 15 times slower than
  278. normal.
  279. Open Prolog spins a cursor during long evaluations to prevent resting.
  280. However, if you are text-editing during an evaluation, the cursor will be
  281. the I-beam, and it won't be animated; if you pause typing for more
  282. than about 15 seconds, then the machine will rest.
  283. Note that you can also prevent a portable from resting using the Control Panel 'Portable' tool - consult your manual.
  284.  
  285. ╫ Built-In Predicates
  286. To get a list of all predicates - normal, built-in and external,
  287. there follows a sequence of commands to perform.
  288. Select them all and hit the <ENTER> key:
  289.  
  290. 'system$predicate'(X,Y,Z),functor(Y,X,A),
  291. writeq(X),write('/'),write(A),write(.),write('   % '),write(Z),nl,fail.
  292.  
  293. Note: with a few exceptions, you should stay away from
  294. anything with a $ in it, or anything with the word 'system' in it - you
  295. may end up crashing the program.
  296.  
  297. The file 'Open Prolog Extras' has more information about
  298. the non-standard predicates.
  299.  
  300. ╫ Redefining Built-In Predicates
  301. Open Prolog misbehaves if you try to redefine any built-ins or externals.
  302.  
  303. ╫ Arithmetic
  304. Arithmetic is standard 32-bit integer arithmetic. The following
  305. predefined functions are provided:
  306. unary minus: - 
  307. subtraction: - 
  308. addition: +
  309. multiplication: *
  310. integer division: /
  311. mod (remainder): mod
  312. bitwise and: /\
  313. bitwise or: \/
  314. bitwise not: ~
  315. bitwise leftshift: <<
  316. bitwise rightshift: >>
  317. maximum integer:  maxint
  318. minimum integer: minint
  319. time:  cputime
  320. The function 'cputime' gives the time in milliseconds since system startup
  321. with a short-term granularity of approximately 16 mS (one system 'tick').
  322. Use the built-in procedure 'system$seconds'(Seconds) for more
  323. accurate timing of long intervals.
  324.  
  325. ╫ Operators
  326. The standard DEC Prolog operator definitions are made at startup.
  327. You can get a list of operator definitions by evaluating the following query.
  328.  
  329. current_op(X,Y,Z),write(op(X,Y,Z)),write('.'),nl,fail.
  330.  
  331. ╫ Extended Character Set
  332. The full laser-printer character set (e.g. Times), which has more
  333. characters than the original standard character sets like Chicago,
  334. is assumed here.
  335.  
  336. Accented characters are treated as alphabetic, so atoms containing
  337. accented characters don't need to be put in quotes.
  338.  
  339. Thus the following is legal:
  340.  
  341. Xèvier = nùirÆn+jƒrgen+âcole+grÅve+da¢+ìedilla+forÉt.
  342.  
  343. ╫ Sorting
  344. Sorting is performed by the Mac's International Utilities, which
  345. should handle accented characters correctly.
  346. Note that case is ignored when sorting functor or atom names.
  347.  
  348. ╫ Files
  349. The file-handling arrangements are essentially unchanged from DEC Prolog,
  350. except where obviously necessary. Some built-in predicates have been
  351. omitted, notably 'close/1' and 'fileErrors' & 'nofileerrors'.
  352.  
  353. ╫ File Naming
  354. File naming follows standard Mac practice. To specify a file in the
  355. home folder, just give its name (as 'benchmarks' above).
  356.  
  357. If it's in another folder, you can give its full pathname. For example, to 
  358. consult a file called 'Utilities' on a disk or volume called 'Open Prolog Disk'
  359. in a folder called 'Samples' you could use:
  360.  
  361. ['Open Prolog Disk:Samples:Utilities'].
  362.  
  363. Alternatively, you can specify a file by its partial pathname (i.e. the extra information needed to 'get from' the Home Folder to there).
  364. For instance, on this distribution you can use the following to consult
  365. the file 'Tak' in the folder 'Samples' which is in the Home Folder:
  366.  
  367. [':Samples:Tak'].
  368.  
  369. ╫ End of File & End of Line
  370. -    End of line & end of file treatment is the same as in DEC Prolog.
  371. -    When reading from a file, the last term is always 'end_of_file'.
  372. -    When get-ing or get0-ing from a file, the last character is code 26.
  373. .    Carriage Returns (ASCII code 13), generally signifying end-of-line in a file,
  374. are filtered out of the get or get0 stream and replaced by code 31.
  375.  
  376. Input from a window never results in an end of file condition.
  377.  
  378. ╫ nl
  379. -    nl outputs a Carriage Return (ASCII code 13).
  380.  
  381. ╫ get & get0
  382. -    get & get0 always return the next character, irrespective of whether it is
  383. 'printable' or not.
  384.  
  385. ╫ Debugging
  386. The main Program Debugging facility is the trace/1 predicate.
  387. You can trace the execution of a predicate by calling it via trace:
  388.  
  389. %assuming you've already consulted 'tak' above╔
  390.  
  391. trace(tak(12,8,4,N)).
  392.  
  393. The commands available are:
  394. <ENTER> - trace
  395. s<ENTER> - step over
  396. a<ENTER> - abort
  397. f<ENTER> - fail
  398. @<ENTER> - break for one command
  399.  
  400. It's not possible to spy.
  401.  
  402. The unknown/2 predicate specifies what happens when a call is made
  403. to an unknown predicate. (Allowable values are fail or trace.)
  404.  
  405. E.g., select:
  406.  
  407. unknown(X,trace).
  408.  
  409. This will set Open Prolog to abort when an unknown call is made.
  410.  
  411. Try it now by selecting:
  412.  
  413. huh(What).
  414.  
  415. A snazzy source-level debugger, a lê SADE, is under development.
  416.  
  417. ╫ System Error Messages:
  418. There are three kinds of error messages:
  419. A. A simple information box with 'OK' as the only option.
  420. B. A 'Diagnostic' or 'Breakpointer' information box.
  421. This is intended for giving debugging
  422. information, and if it turns up in normal operation it means that a special
  423. condition has occured. 
  424. C. Whenever Open Prolog detects a system error, it will warn you about it.
  425. You are generally given some information about the source and kind of the
  426. error. Naturally, it isn't always possible to predict what will happen
  427. if you continue operating the system.
  428.  
  429. Summarising: When you get an error message,
  430. if you are given a choice, it's best (initially) to exit.
  431. You normally get to save your files and windows, although sometimes
  432. the nature of the error causes more errors to be made as the files &
  433. windows are being saved. It that happens, you lose your fi╔
  434. Experience will tell what's best to do in a situation.
  435. (I sure hope you don't get a lot of that experience╔)
  436.  
  437. I'd appreciate you mailing me with the circumstances and nature of
  438. B & C type messages, and of undesirable effects of A type messages.
  439.  
  440. ╫ Problems with Open Prolog
  441. Here are the known significant difficulties with Open Prolog at the moment.
  442. There are simple workarounds for them all.
  443.  
  444. 1. The absolute maximum size of any file that can be seen in an Open Prolog
  445. window is limited to 32767 characters.
  446. Actually the realistic maximum is about 16000.
  447. This limit only applies to files that you want to open as windows.
  448. Open Prolog neither truncates window files nor warns you about impending
  449. problems.
  450. So, for example, if your program produces large output files, that's OK as
  451. long as you don't want to open them as windows from Open Prolog.
  452. Workarounds:
  453.  Break your files into smaller files.
  454.  Trim the Worksheet periodically so that is doesn't get too big.
  455.  To view and process larger text files, you'll need to use a text processor
  456. (MPW highly recommended) or word processor in text mode (MS Word or
  457. MacWrite II).
  458.  
  459. 2. Currently, the window system and the file system are not integrated.
  460. So, changes you make to a file in a window are not automatically
  461. reflected in the file when it is being consulted.
  462. Workaround - after making changes to a file in a window,
  463. save it before consulting or reconsulting it.
  464. (Actually, it's a good idea to save your work each time anyway╔)
  465. Likewise, a window must be closed before your program
  466. starts to output to it.
  467. Another difficulty is if you try to open a window & file from a predicate
  468. and the file is already open into a window of a different name; then the
  469. system will not recognise the already open window as the one it wants,
  470. and will refuse to open another.
  471.  
  472. 3. Tab characters are not properly represented or printed - instead a tab
  473. always occupies exactly one space. If you intend using your files with
  474. another text/word processor, then you should put them in╔
  475.  
  476. 4. The implementation of cuts in a disjunctive call (i.e. ;/2) is not
  477. according to the impending Prolog standard.
  478. According to the standard, cut in a disjunction should have the same effect
  479. as a cut in the disjunction's parent. In Open Prolog, a cut in a disjunction has
  480. only a local effect.
  481. Secondly, disjunctive calls are compiled on the fly in Open Prolog, so they are
  482. much slower than normal code.
  483. Both these points will be fixed soon.
  484.  
  485. 5.    Similarly to above, a nested conjunctive call has the same problems -
  486. cuts have only local effects, and the nested calls are compiled on the fly.
  487.  
  488. ╫ External Predicates
  489. External predicates are extra predicates written separately from Open Prolog, and 
  490. then 'dropped' in to Open Prolog using something like ResEdit. At present, only an
  491. MPW Pascal interface is defined, although it would be a trivial job to define an
  492. MPW C interface (and MPW Assemby) also. A small amount of work would be necessary
  493. to use THINK Pascal and C.
  494. In this release, 'system$random', 'say', 'play'  and 'system$menu' are external
  495. predicates. Likewise 'draw' is an external predicate (see separate documentation).
  496. If you really want to write some external predicates, mail me & I'll send you
  497. the MPW Pascal files you need together with an example.
  498. Be aware that it's likely that the interface will change in the future.
  499.  
  500. ╫ Revision History
  501. - 1.0d26
  502. 1.    Undo finally implemented!
  503. 2.  Minor cosmetic changes to minimise junk on worksheet.
  504. 3.  You can add menus to Open Prolog. See 'Open Prolog Extras' for details.
  505. 4.  Bug fix - a bug which crashed Open Prolog when a systen predicate was
  506.     stopped by command-. has been removed.
  507. - 1.0d25 Bug Fixes - name/2 with numbers, serious memory Management
  508. garbage collection errors fixed. 'system$alert'/1 replaced by 'system$alert'/4
  509. 'system$confirm'/4 introduced also. Default folder changed on startup - see text.
  510. - 1.0d24 Bug Fixes (multiple operator definitions, command-.), introduction of a status bar, use of 'Syserrs.err' for error messages╔
  511. - 1.0d23, 1.0d22 & 1.0d21 Bug Fixes
  512. -1.0d20
  513. 1. Add garbage collection to the code space - findall without tears!
  514. 2. Fix some odd behaviour of the debugger. It seemed to wander off
  515. sometimes╔
  516. -1.0d18
  517. 1. Animated Cursor to stop it resting or sleeping on a long calculation in a
  518. Portable.
  519. -1.0d17
  520. 1. Cosmetic improvements, particularly multi-screen handling.
  521. 2. New window-handling predicates.
  522. 3. External Predicate Interface Inprovement
  523.  
  524. - 1.0d16
  525. 1.    A crash-without-warning bug has been cured.
  526. 2.    A bug in call(X) which declated a call like call((read(X),X)) illegal because
  527. the second call was uninstantiated has been cured.
  528. 3.    The DCG compiler has been changed a little.
  529. 4.    Various cosmetic improvements.
  530. 5.    A number of extra predicates to handle window I/O have been added.
  531.  
  532. - 1.0d15
  533. 1. A restriction which required all <ENTER>ed text (including commands)
  534. to be on the Worksheet has been removed.
  535. 2. Sometimes the way in which part of a line was picked for selection
  536. was a little unpredictable. This has been cured.
  537. 3. A -192 warning caused by a harmless fault in the System
  538. when DA Menuz and Suitcase were present has been removed.
  539.  
  540. - 1.0d14
  541. Initial Release
  542.  
  543.